package com.rabbitmq.ps;

import com.rabbitmq.RabbitMqConnectionUtil;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Producer {

    //交换机名称
    static final String FANOUT_EXCHANGE = "fanout_exchange";
    //队列名称1
    static final String FANOUT_QUEUE_1 = "fanout_queue_1";
    //队列名称2
    static final String FANOUT_QUEUE_2 = "fanout_queue_2";

    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接
        Connection connection = RabbitMqConnectionUtil.getConnection();
        //创建频道
        Channel channel = connection.createChannel();
        /**
         * 声明交换机
         * 参数1 交换机名称
         * 参数2 交换机类型，fanout、topic、direct、headers
         */
        channel.exchangeDeclare(FANOUT_EXCHANGE, BuiltinExchangeType.FANOUT);
        /**
         * 声明(创建)的队列
         * 参数1 队列名称
         * 参数2 是否定义持久化队列
         * 参数3 是否独占本次连接
         * 参数4 是否在不适用的时候自动删除队列
         * 参数5 队列其他参数
         */
        channel.queueDeclare(FANOUT_QUEUE_1, true, false, false, null);
        channel.queueDeclare(FANOUT_QUEUE_2, true, false, false, null);
        //队列绑定交换机
        channel.queueBind(FANOUT_QUEUE_1, FANOUT_EXCHANGE, "");
        channel.queueBind(FANOUT_QUEUE_2, FANOUT_EXCHANGE, "");
        for (int i = 0; i < 40; i++) {
            String message = "Publish/Subscribe" + i;
            /**
             * 参数1 交换机名称，如果没有指定则使用Default Exchange
             * 参数2 路由key，简单模式可以传递队列的名称
             * 参数3 消息其他属性
             * 参数4 消息内容
             */
            channel.basicPublish(FANOUT_EXCHANGE, "", null, message.getBytes());
            System.out.println("已发送消息" + message);
        }

        //关闭资源
        channel.close();
        connection.close();
    }
}
